package com.tjnu.baiyi.action;

import java.util.List;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.tjnu.baiyi.entity.TbAlbum;
import com.tjnu.baiyi.entity.TbAlbumVisitor;
import com.tjnu.baiyi.entity.TbUser;

@Scope("prototype")
@Controller("indexAction")
public class IndexAction extends BaseAction {
	private static final long serialVersionUID = 2211298568843999149L;

	public String index() throws Exception {
		try {
			// 当前登录用户的信息在用户登录时已经存入session中，故不用获取用户的信息
			// 1： 所有相册名称： 根据当前登录的用户 id获取相册名称及相册的封面：根据相册的 访问量进行排序
			// TbUser user1 = (TbUser) ActionContext.getContext().getSession()
			// .get("currentUser");// 获取已经登录了的用户的信息
			System.out.println("IndexAction.index()");
			TbUser user1 = (TbUser) session.getAttribute("currentUser");
			if (user1 != null) {// 验证通过：把用户信息存入session中
				List<TbUser> list = tbUserDao.findAll();// 根据用户的人气值从高到低进行排序查询
				List<TbAlbum> list2 = tbAlbumDao.findAllByPage(0);// 根据相册的热度从高到低进行查询
				Integer size = tbAlbumDao.getfindAllSize();// 获取所有的相册数
				boolean flag = tbUserDao.isFirstUserHotAndCurrentUser(
						list.get(0).getUserId(), user1.getUserId());// 判断排行最高的用户和当前登录用户是否为好友，true：是；false：不是
				if (flag) {
					session.setAttribute("flag", 0);// 已经关注
				} else {
					session.setAttribute("flag", 1);// 未关注
				}
				session.setAttribute("currentUser", user1);// 将用户信息保存在Session对象中
				session.setAttribute("userHot", list);
				session.setAttribute("albumHot", list2);
				session.setAttribute("size", size / 10);// 所有的页数，没有设置显示10条数据记录
				return SUCCESS;
			} else {// 验证不通过：返回错误提示信息
				System.out.println("user not exist");
				return LOGIN;
			}
		} catch (Exception e) {
			System.out.println("get index fail");
			return ERROR;
		}
	}

	public String getIndexByPage() throws Exception {
		try {
			String page = request.getParameter("id");
			TbUser user1 = (TbUser) session.getAttribute("currentUser");
			if (user1 != null) {// 验证通过：把用户信息存入session中
				System.out.println("currentUser is't null");
				List<TbUser> list = tbUserDao.findAll();// 根据用户的人气值从高到低进行排序查询
				List<TbAlbum> list2 = tbAlbumDao.findAllByPage(Integer
						.parseInt(page));// 根据相册的热度从高到低进行查询
				session.setAttribute("currentUser", user1);// 将用户信息保存在Session对象中
				session.setAttribute("userHot", list);
				session.setAttribute("albumHot", list2);
				session.setAttribute("page", page);
				return SUCCESS;
			} else {// 验证不通过：返回错误提示信息
				System.out.println("user not exist");
				return LOGIN;
			}
		} catch (Exception e) {
			System.out.println("get index fail");
			return ERROR;
		}
	}

	// 设置page
	public String page() throws Exception {
		return SUCCESS;
	}

	/**
	 * 根据从前台传过来的相册id查询此相册是否是登录了的用户的相册。 是：不更新访客记录。 不是：更新访客记录
	 * 
	 * @return
	 * @throws Exception
	 */
	public String toOthersAlbum() throws Exception {
		String id = request.getParameter("id").toString();// 获取从前台传过来的相册id
		TbUser currentUser = (TbUser) session.getAttribute("currentUser");// 获取已经登录了的用户的信息
		Integer userId = currentUser.getUserId();// 获取已经登录了的用户的Id
		Boolean flag = tbAlbumDao.validateUserAndAlbum(userId,
				Integer.parseInt(id));
		if (flag) {// 此相册为当前登录用户的所属相册，不需要更新该相册的访客记录
			session.setAttribute("currentUserAlbum", 1);// 设该相册的标志为1，用于前台页面的判断,表示前台需要显示“上传相片”和“批量管理”
		} else {// 此相册不是当前登录用户的相册，需要更新该相册的访客记录
			Integer visitorSize = tbAlbumDao.findById(Integer.parseInt(id))
					.getVisitorSize();// 获取该相册的访客总数
			tbAlbumDao.updateTbAlbumVisitor(Integer.parseInt(id), userId,
					visitorSize);// 更新访问相册记录
			session.setAttribute("currentUserAlbum", 0);// 设该相册的标志为1，用于前台页面的判断,表示前台“不”需要显示“上传相片”和“批量管理”
		}
		TbAlbum album = tbAlbumDao.findById(Integer.parseInt(id));// 获取该相册信息
		Integer photoSize = album.getTbPhotos().size();// 获取本相册的相片数；
		List<TbAlbumVisitor> albumVisitor = tbAlbumVisitorDao
				.findByAlbumId(Integer.parseInt(id));
		session.setAttribute("album", album);
		session.setAttribute("photoSize", photoSize);
		session.setAttribute("albumVisitor", albumVisitor);
		return SUCCESS;
	}
}
